home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / bin / foo2lava-wrapper < prev    next >
Text File  |  2009-10-19  |  19KB  |  736 lines

  1. #!/bin/sh
  2.  
  3. #* Copyright (C) 2003-2006  Rick Richardson
  4. #*
  5. #* This program is free software; you can redistribute it and/or modify
  6. #* it under the terms of the GNU General Public License as published by
  7. #* the Free Software Foundation; either version 2 of the License, or
  8. #* (at your option) any later version.
  9. #*
  10. #* This program is distributed in the hope that it will be useful,
  11. #* but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. #* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. #* GNU General Public License for more details.
  14. #*
  15. #* You should have received a copy of the GNU General Public License
  16. #* along with this program; if not, write to the Free Software
  17. #* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. #*
  19. #* Authors: Rick Richardson <rick.richardson@comcast.net>
  20.  
  21. VERSION='$Id: foo2lava-wrapper.in,v 1.39 2009/05/11 17:35:55 rick Exp $'
  22.  
  23. #
  24. # Printer Notes:
  25. #
  26. # LAVAFLOW:
  27. #    Konica Minolta magicolor 2530 DL -    -z0
  28. #    Konica Minolta magicolor 2490 MF -    -z0
  29. #    Xerox Phaser 6115MFP -            -z0
  30. #    Konica Minolta magicolor 1600W -    -z2
  31. #    Konica Minolta magicolor 1680MF -    -z2
  32. #    Konica Minolta magicolor 1690MF -    -z2
  33. #
  34. # OPL:
  35. #    Konica Minolta 2480 MF -        -z1
  36. #
  37.  
  38. PROGNAME="$0"
  39. BASENAME=`basename $PROGNAME`
  40. PREFIX=/usr
  41. SHARE=$PREFIX/share/foo2lava
  42. PATH=$PATH:/sw/bin:/opt/local/bin
  43.  
  44. #
  45. #    Log the command line, for debugging and problem reports
  46. #
  47. if [ -x /usr/bin/logger -o -x /bin/logger ]; then
  48.     logger -t "$BASENAME" -p lpr.info -- "foo2lava-wrapper $@" </dev/null
  49. fi
  50.  
  51. usage() {
  52.     cat <<EOF
  53. Usage:
  54.     $BASENAME [options] [ps-file]
  55.  
  56.     Foomatic printer wrapper for the foo2lava printer driver.
  57.     This script reads a Postscript ps-file or standard input
  58.     and converts it to LAVAFLOW printer format.
  59.  
  60. Normal Options:
  61. -c                Print in color (else monochrome)
  62. -C colormode      Colormode [$COLORMODE]
  63.                     1=Photos, 2=Photo and text, 3=Graphics and text
  64.                     10=ICM color profile (using -G *.icm file)
  65. -d duplex         Duplex code to send to printer [$DUPLEX]
  66.                     1=off, 2=longedge, 3=shortedge
  67. -m media          Media code to send to printer [$MEDIA]
  68.                     1=standard 4=transparency 20=thick stock 22=envelope
  69.                     23=letterhead 25=postcard 26=labels 27=recycled
  70.                     28=glossy
  71. -p paper          Paper code [$PAPER]
  72.                     1=executive 2=letter 3=legal 25=A5 26=A4 45=B5jis
  73.                     65=B5iso 80=envMonarch 81=env#10 90=envDL 91=envC5
  74.                     92=envC6 835=4x6\" 837=10x15cm
  75. -n copies         Number of copies [$COPIES]
  76. -r <xres>x<yres>  Set device resolution in pixels/inch [$RES]
  77. -s source         Source code to send to printer [$SOURCE]
  78.                     1=upper, 2=lower, 4=manual, 7=auto
  79.             Code numbers may vary with printer model.
  80. -t                Draft mode.  Every other pixel is white.
  81. -2/-3/-4/-6/-8/-10/-12/-14/-15/-16/-18
  82.                   Print with N-up (requires psutils)
  83. -o orient         For N-up: -op is portrait, -ol is landscape, -os is seascape.
  84.  
  85. Printer Tweaking Options:
  86. -u <xoff>x<yoff>  Set offset of upper left printable in pixels [varies]
  87. -l <xoff>x<yoff>  Set offset of lower right printable in pixels [varies]
  88. -L mask           Send logical clipping values from -u/-l in ZjStream [3]
  89.                   0=no, 1=Y, 2=X, 3=XY
  90. -P                Do not output START_PLANE codes.  May be needed by some
  91.                   monochrome-only printers.
  92. -X padlen         Add extra zero padding to the end of BID segments [16]
  93. -z model          Model: 0=2530DL or 2=1600W (LAVAFLOW) or 1=2480MF (OPL) [0]
  94.  
  95. Color Tweaking Options:
  96. -g gsopts         Additional options to pass to Ghostscript, such as
  97.                   -dDITHERPPI=nnn, etc.  May appear more than once. []
  98. -G profile.icm    Convert profile.icm to a Postscript CRD using icc2ps and
  99.                   adjust colors using the setcolorrendering PS operator.
  100.                   $SHARE/icm/ will be searched for profile.icm.
  101. -I intent         Select profile intent from ICM file [$INTENT]
  102.                   0=Perceptual, 1=Colorimetric, 2=Saturation, 3=Absolute
  103. -G gamma-file.ps  Prepend gamma-file to the Postscript input to perform
  104.                   color correction using the setcolortransfer PS operator.
  105.  
  106. Debugging Options:
  107. -S plane          Output just a single color plane from a color print [all]
  108.                   1=Cyan, 2=Magenta, 3=Yellow, 4=Black
  109. -D lvl            Set Debug level [$DEBUG]
  110. -V                $VERSION
  111. EOF
  112.  
  113.     exit 1
  114. }
  115.  
  116. #
  117. #       Report an error and exit
  118. #
  119. error() {
  120.     echo "$BASENAME: $1" >&2
  121.     exit 1
  122. }
  123.  
  124. dbgcmd() {
  125.     if [ $DEBUG -ge 1 ]; then
  126.         echo "$@" >&2
  127.     fi
  128.     "$@"
  129. }
  130.  
  131. #
  132. #    N-up-ify the job.  Requires psnup from psutils package
  133. #
  134. nup() {
  135.     case "$NUP" in
  136.     [2368]|1[0458])
  137.     tr '\r' '\n' | psnup $NUP_ORIENT -d2 -$NUP -m.3in -p$paper -q
  138.     ;;
  139.     [49]|1[26])
  140.     tr '\r' '\n' | psnup $NUP_ORIENT -d2 -$NUP -m.5in -p$paper -q
  141.     ;;
  142.     *)
  143.     error "Illegal call to nup()."
  144.     ;;
  145.     esac
  146. }
  147.  
  148. #
  149. #       Process the options
  150. #
  151.  
  152. # Try to use a local copy of GhostScript 8.14, if available.  Otherwise,
  153. # fallback to whatever the Linux distro has installed (usually 7.05)
  154. #
  155. # N.B. := operator used here, when :- would be better, because "ash"
  156. # doesn't have :-
  157. if gs.foo -v >/dev/null 2>&1; then
  158.         GSBIN=${GSBIN:-gs.foo}
  159. else
  160.         GSBIN=${GSBIN:-gs}
  161. fi
  162.  
  163. CMDLINE="$*"
  164. DEBUG=0
  165. DUPLEX=1
  166. COLOR=
  167. COLORMODE=default
  168. MODEL=0
  169. QUALITY=1
  170. QUALITY=wts
  171. MEDIA=0
  172. COPIES=1
  173. test -r /etc/papersize && PAPER=$(cat /etc/papersize)
  174. test "$PAPER" || PAPER=2
  175. RES=1200x600
  176. SOURCE=255
  177. NUP=
  178. CLIP_UL=
  179. CLIP_LR=
  180. CLIP_LOG=
  181. BC=
  182. AIB=
  183. NOPLANES=
  184. COLOR2MONO=
  185. GAMMAFILE=default
  186. INTENT=0
  187. GSOPTS=
  188. EXTRAPAD=
  189. SAVETONER=
  190. NUP_ORIENT=
  191. GSDEV=-sDEVICE=pbmraw
  192. # What mode to use if the user wants us to pick the "best" mode
  193. case `$GSBIN --version` in
  194. 7*)    DEFAULTCOLORMODE=10
  195.     DEFAULTCOLORMODE=2
  196.     DEFAULTCOLORMODE=10
  197.     ;;
  198. 8.1*)
  199.     QUALITY=1
  200.         DEFAULTCOLORMODE=10
  201.         ;;
  202. *)    DEFAULTCOLORMODE=2
  203.     DEFAULTCOLORMODE=10
  204.     ;;
  205. esac
  206. while getopts "1:23456789o:b:cC:d:g:l:u:L:m:n:p:q:r:s:tz:ABS:D:G:I:PX:Vh?" opt
  207. do
  208.     case $opt in
  209.     b)    GSBIN="$OPTARG";;
  210.     c)    COLOR=-c;;
  211.     d)    DUPLEX="$OPTARG";;
  212.     g)    GSOPTS="$GSOPTS $OPTARG";;
  213.     m)    MEDIA="$OPTARG";;
  214.     n)    COPIES="$OPTARG";;
  215.     p)    PAPER="$OPTARG";;
  216.     q)    QUALITY="$OPTARG";;
  217.     r)    RES="$OPTARG";;
  218.     s)    SOURCE="$OPTARG";;
  219.     t)    SAVETONER="-t";;
  220.     z)    MODEL="$OPTARG";;
  221.     l)    CLIP_LR="-l $OPTARG";;
  222.     u)    CLIP_UL="-u $OPTARG";;
  223.     L)    CLIP_LOG="-L $OPTARG";;
  224.     A)    AIB=-A;;
  225.     B)    BC=-B;;
  226.     C)    COLORMODE="$OPTARG";;
  227.     S)    COLOR2MONO="-S$OPTARG";;
  228.     D)    DEBUG="$OPTARG";;
  229.     G)    GAMMAFILE="$OPTARG";;
  230.     I)    INTENT="$OPTARG";;
  231.     P)    NOPLANES=-P;;
  232.     X)    EXTRAPAD="-X $OPTARG";;
  233.     [234689])    NUP="$opt";;
  234.     [57])    error "Can't find acceptable layout for $opt-up";;
  235.     1)    case "$OPTARG" in
  236.         [024568])    NUP="1$OPTARG";;
  237.         *)    error "Can't find acceptable layout for 1$OPTARG-up";;
  238.         esac
  239.         ;;
  240.     o)    case "$OPTARG" in
  241.         l*)    NUP_ORIENT=-l;;
  242.         s*)    NUP_ORIENT=-r;;
  243.         p*|*)    NUP_ORIENT=;;
  244.         esac;;
  245.     V)    echo "$VERSION"; foo2lava -V; foo2zjs-pstops -V; exit 0;;
  246.     h|\?)
  247.         if [ "$CMDLINE" != "-?" -a "$CMDLINE" != -h ]; then
  248.             echo "Illegal command:"
  249.             echo "    $0 $CMDLINE"
  250.             echo
  251.         fi
  252.         usage;;
  253.     esac
  254. done
  255. shift `expr $OPTIND - 1`
  256.  
  257. #
  258. # If there is an argument left, take it as the file to print.
  259. # Else, the input comes from stdin.
  260. #
  261. if [ $# -ge 1 ]; then
  262.     if [ "$LPJOB" = "" ]; then
  263.     : # LPJOB="$1"
  264.     fi
  265.     exec < $1
  266. fi
  267.  
  268.  
  269. #
  270. #    Select the ghostscript device to use
  271. #
  272. if [ "" = "$COLOR" ]; then
  273.     GSDEV=-sDEVICE=pbmraw
  274. else
  275.     GSDEV=-sDEVICE=bitcmyk
  276. fi
  277. case "$GAMMAFILE" in
  278. default)
  279.     if [ $MODEL = 0 ]; then
  280.     GAMMAFILE=km2530-jconner-d50.icm
  281.     else
  282.     GAMMAFILE=km-1600-rgb-392-bpp1.icm
  283.     fi
  284.     ;;
  285. none) GAMMAFILE=;;
  286. esac
  287.  
  288. #
  289. case "$QUALITY" in
  290. 0)
  291.     GSOPTS="-dCOLORSCREEN $GSOPTS"
  292.     ;;
  293. 1)
  294.     GSOPTS="-dCOLORSCREEN $GSOPTS"
  295.     ;;
  296. 2)
  297.     GSOPTS="-dMaxBitmap=500000000 $GSOPTS"
  298.     ;;
  299. wts)
  300.     GSOPTS="-dCOLORSCREEN -dMaxBitmap=500000000 $GSOPTS"
  301.     ;;
  302. esac
  303.  
  304. #
  305. #    Validate model code
  306. #
  307. case "$MODEL" in
  308. 0|1|2)    ;;
  309. *)    error "Unknown model code $MODEL";;
  310. esac
  311.  
  312. #
  313. #    Validate media code
  314. #
  315. case "$MEDIA" in
  316. 0|plain)    MEDIA=0; if [ $MODEL = 1 ]; then MEDIA=plain; fi;;
  317. 4|transparency)    MEDIA=4; if [ $MODEL = 1 ]; then MEDIA=transparency; fi;;
  318. 20|thickstock)    MEDIA=20; if [ $MODEL = 1 ]; then MEDIA=cardstock; fi;;
  319. 22|envelope)    MEDIA=22; if [ $MODEL = 1 ]; then MEDIA=envelope; fi;;
  320. 23|letterhead)    MEDIA=23; if [ $MODEL = 1 ]; then MEDIA=stationery-letterhead; fi;;
  321. 25|postcard)    MEDIA=25; if [ $MODEL = 1 ]; then MEDIA=photographic-matte; fi;;
  322. 26|labels)    MEDIA=26; if [ $MODEL = 1 ]; then MEDIA=labels; fi;;
  323. 27|recycled)    MEDIA=27; if [ $MODEL = 1 ]; then MEDIA=plain; fi;;
  324. 28|glossy)    MEDIA=28; if [ $MODEL = 1 ]; then MEDIA=photographic-glossy; fi;;
  325. [0-9]*)        ;;
  326. *)        error "Unknown media code $MEDIA";;
  327. esac
  328.  
  329. #
  330. #    Validate source (InputSlot) code
  331. #
  332. case "$SOURCE" in
  333. 1|tray1)    SOURCE=1;;
  334. 4|tray2)    SOURCE=4;;
  335. 255|auto)    SOURCE=255;;
  336. [0-9]*)        ;;
  337. *)        error "Unknown source code $SOURCE";;
  338. esac
  339.  
  340. #
  341. #    Validate Duplex code
  342. #
  343. case "$DUPLEX" in
  344. 1|off|none)    DUPLEX=1;;
  345. 2|long*)    DUPLEX=2;;
  346. 3|short*)    DUPLEX=3;;
  347. [0-9]*)        ;;
  348. *)        error "Unknown duplex code $DUPLEX";;
  349. esac
  350.  
  351. #
  352. #    Validate Resolution
  353. #
  354. case "$RES" in
  355. 600x600)    ;;
  356. 1200x600)    ;;
  357. 2400x600)    ;;
  358. *)        error "Illegal resolution $RES";;
  359. esac
  360.  
  361. #
  362. #    Figure out the paper dimensions in pixels/inch, and set the
  363. #    default clipping region.  Unfortunately, this is a trouble
  364. #    area for ZjStream printers.  Various versions of ZjS print
  365. #    engines react differently when asked to print into their
  366. #    unprintable regions.
  367. #
  368. set_clipping() {
  369.     ulx=$1; uly=$2
  370.     lrx=$3; lry=$4
  371.  
  372.     # Set clipping region if it isn't already set
  373.     if [ "$CLIP_UL" = "" ]; then
  374.     case "$RES" in
  375.     600x600)    ulx=`expr $ulx / 2`;;
  376.     2400x600)    ulx=`expr $ulx \* 2`;;
  377.     esac
  378.     CLIP_UL="-u ${ulx}x${uly}"
  379.     fi
  380.     if [ "$CLIP_LR" = "" ]; then
  381.     case "$RES" in
  382.     600x600)    lrx=`expr $lrx / 2`;;
  383.     2400x600)    lrx=`expr $lrx \* 2`;;
  384.     esac
  385.     CLIP_LR="-l ${lrx}x${lry}"
  386.     fi
  387. }
  388.  
  389. case "$PAPER" in
  390. Custom*)
  391.         case "$PAPER" in
  392.         Custom\.[0-9]*\x[0-9]*)
  393.             XDIM=`echo "$PAPER" | sed -e 's/Custom\.//' -e 's/x.*//'`
  394.             YDIM=`echo "$PAPER" | sed -e 's/Custom\.//' -e 's/.*x//'`
  395.             ;;
  396.         *)
  397.         #%%BeginFeature: *CustomPageSize True
  398.         #216
  399.         #360
  400.         #0
  401.         #0
  402.         #0
  403.         #pop pop pop pop pop
  404.  
  405.         #%%BeginFeature: *CustomPageSize True
  406.         #792.000000 612.000000 1 0.000000 0.000000
  407.         #pop pop pop pop pop
  408.  
  409.         if [ $DEBUG = 0 ]; then
  410.             TMPFILE=/tmp/cus$$
  411.         else
  412.             TMPFILE=/tmp/custom.ps
  413.         fi
  414.         cat >$TMPFILE
  415.         exec <$TMPFILE
  416.  
  417.         tmp=`head -n 10000 $TMPFILE \
  418.             | sed -n '/CustomPageSize/{n;p;n;p;}' \
  419.             | tr '\n' ' '`
  420.         case "$tmp" in
  421.         [0-9]*\ [0-9]*)
  422.             XDIM=`echo "$tmp" | sed 's/ .*//'`
  423.             YDIM=`echo "$tmp" | sed -e 's/^[^ ]* //' -e 's/ .*//'`
  424.             ;;
  425.         *)
  426.             if [ $DEBUG = 0 ]; then rm -f $TMPFILE; fi
  427.             error "Custom page size [XY]DIM != 1-99999"
  428.             ;;
  429.         esac
  430.         ;;
  431.         esac
  432.         xmm=`dc -e "$XDIM 25.4 * 36 + 72/p"`
  433.         XDIM=`dc -e "$XDIM 1200* 72/p"`
  434.         ymm=`dc -e "$YDIM 25.4 * 36 + 72/p"`
  435.         YDIM=`dc -e "$YDIM 600* 72/p"`
  436.         PAPER=101;        paper=letter;
  437.         MEDIA=20
  438.                 set_clipping 2 100     2 100
  439.         if [ $MODEL = 1 ]; then PAPER=custom_size_${xmm}x${ymm}mm; fi
  440.         ;;
  441. 1|executive)    PAPER=1;    paper=executive; XDIM="8700";  YDIM="6300"
  442.         set_clipping 206 110    206 110
  443.         if [ $MODEL = 1 ]; then PAPER=na_executive_7.25x10.5in; fi
  444.         ;;
  445. 2|letter)    PAPER=2;    paper=letter;    XDIM="10200"; YDIM="6600"
  446.         set_clipping 204 100    204 100
  447.         if [ $MODEL = 1 ]; then PAPER=na_letter_8.5x11in; fi
  448.         ;;
  449. 3|legal)    PAPER=3;    paper=legal;     XDIM="10200"; YDIM="8400"
  450.         set_clipping 204 104    204 104
  451.         if [ $MODEL = 1 ]; then PAPER=na_legal_8.5x14in; fi
  452.         ;;
  453. 25|a5|A5)    PAPER=25;    paper=a5;        XDIM="6992";  YDIM="4960"
  454.         set_clipping 216 112    216 112
  455.         if [ $MODEL = 1 ]; then PAPER=iso_a5_148x210mm; fi
  456.         ;;
  457. 26|a4|A4)    PAPER=26;    paper=a4;        XDIM="9920";  YDIM="7016"
  458.         set_clipping 208 100    208 100
  459.         if [ $MODEL = 1 ]; then PAPER=iso_a4_210x297mm; fi
  460.         ;;
  461. 45|b5jis|B5jis)    PAPER=45;    paper=b5;        XDIM="8598";  YDIM="6070"
  462.         set_clipping 204 107    202 107
  463.         if [ $MODEL = 1 ]; then PAPER=jis_b5_182x257mm; fi
  464.         ;;
  465. 65|b5iso|B5iso)    PAPER=65;    paper=b5;        XDIM="8314";  YDIM="5906"
  466.         set_clipping 206 105    204 105
  467.         ;;
  468. 80|envMonarch)    PAPER=80;    paper=envMonarch;XDIM="4650";  YDIM="4500"
  469.         set_clipping 214 106    212 106
  470.         if [ $MODEL = 1 ]; then PAPER=na_monarch_3.875x7.5in; fi
  471.         ;;
  472. 81|"env#10")    PAPER=81;    paper=env10;     XDIM="4950";  YDIM="5700"
  473.         set_clipping 204 114    202 114
  474.         if [ $MODEL = 1 ]; then PAPER=na_number-10_4.125x9.5in; fi
  475.         ;;
  476. 90|envDL)    PAPER=90;    paper=envDL;     XDIM="5200";  YDIM="5200"
  477.         set_clipping 216 104    216 104
  478.         if [ $MODEL = 1 ]; then PAPER=iso_dl_110x220mm; fi
  479.         ;;
  480. 91|envC5)    PAPER=91;    paper=envC5;     XDIM="7650";  YDIM="5408"
  481.         set_clipping 210 112    208 112
  482.         if [ $MODEL = 1 ]; then PAPER=iso_c5_162x229mm; fi
  483.         ;;
  484. 92|envC6)    PAPER=92;    paper=envC6;     XDIM="5386";  YDIM="3826"
  485.         set_clipping 214 105    212 105
  486.         if [ $MODEL = 1 ]; then PAPER=iso_c6_114x162mm; fi
  487.         ;;
  488. 835|photo4x6)    PAPER=835;    paper=photo4x6;  XDIM="4800";  YDIM="3600"
  489.         set_clipping 224 104    224 104
  490.         ;;
  491. 837|photo10x15)    PAPER=837;    paper=photo10x15; XDIM="4818";  YDIM="3590"
  492.         # Actually, 102x152
  493.         set_clipping 201 115    201 115
  494.         ;;
  495. *)        error "Unimplemented paper code $PAPER";;
  496. esac
  497. # e.g. /usr/share/ghostscript/7.07/lib/gs_statd.ps
  498. PAPERSIZE="-sPAPERSIZE=$paper";
  499.  
  500. case "$RES" in
  501. 600x600)    XDIM=`expr $XDIM / 2`;;
  502. 1200x600)    ;;
  503. 2400x600)    XDIM=`expr $XDIM \* 2`;;
  504. esac
  505. DIM="${XDIM}x${YDIM}"
  506.  
  507. #
  508. # Filter thru psnup if N-up printing has been requested
  509. #
  510. case $NUP in
  511. [234689]|1[024568])    PREFILTER="nup";;
  512. *)            PREFILTER=cat;;
  513. esac
  514. if [ "$DEBUG" -ge 9 ]; then
  515.     PREFILTER="tee /tmp/$BASENAME.ps"
  516. fi
  517.  
  518. #
  519. #    Overload -G.  If the file name ends with ".icm" or ".ICM"
  520. #    then convert the ICC color profile to a Postscript CRD,
  521. #    then prepend it to the users job.  Select the intent
  522. #    using the -I option.
  523. #
  524.  
  525. create_crd() {
  526.     #
  527.     # Create a Postscript CRD
  528.     #
  529.     ICC2PS=$PREFIX/bin/foo2zjs-icc2ps
  530.     if [ -x $ICC2PS ]; then
  531.         case "$GAMMAFILE" in
  532.         none.icm | */none.icm)
  533.             ;;
  534.         *)
  535.         if [ -x /usr/bin/logger ]; then
  536.         logger -t "$BASENAME" -p lpr.info -- \
  537.         "`basename $ICC2PS` -o $GAMMAFILE -t$INTENT > $ICCTMP.crd.ps"
  538.         fi
  539.             $ICC2PS -o $GAMMAFILE -t$INTENT > $ICCTMP.crd.ps 2>$ICCTMP.log \
  540.                 || error "Problem converting .ICM file to Postscript"
  541.             ;;
  542.         esac
  543.  
  544.     PSTOPS_OPTS="$PSTOPS_OPTS -c"
  545.         cat > $ICCTMP.usecie.ps <<-EOF
  546.                 %!PS-Adobe-3.0
  547.                 <</UseCIEColor true>>setpagedevice
  548.     EOF
  549.         if [ "$QUALITY" = wts ]; then
  550.             cat >> $ICCTMP.usecie.ps <<-EOF
  551.                 << /UseWTS true >> setuserparams
  552.                 <<
  553.                     /AccurateScreens true
  554.                     /HalftoneType 1
  555.                     /HalftoneName (Round Dot Screen) cvn
  556.                     /SpotFunction { 180 mul cos exch 180 mul cos add 2 div}
  557.                     /Frequency 137
  558.                     /Angle 37
  559.                 >> sethalftone
  560.         EOF
  561.         fi
  562.         cat > $ICCTMP.selcrd.ps <<-EOF
  563.                 /Current /ColorRendering findresource setcolorrendering
  564.     EOF
  565.         case "$GAMMAFILE" in
  566.         none.icm | */none.icm) GAMMAFILE="$ICCTMP.usecie.ps";;
  567.         *)      GAMMAFILE="$ICCTMP.usecie.ps $ICCTMP.crd.ps $ICCTMP.selcrd.ps";;
  568.         esac
  569.     else
  570.         GAMMFILE=
  571.     fi
  572. }
  573.  
  574. if [ $DEBUG -gt 0 ]; then
  575.     ICCTMP=/tmp/icc
  576. else
  577.     ICCTMP=/tmp/icc$$
  578. fi
  579.  
  580. if [ "" = "$COLOR" ]; then
  581.     COLORMODE=
  582.     GAMMAFILE=
  583. else
  584.     case "$COLORMODE" in
  585.     default)    COLORMODE=$DEFAULTCOLORMODE;;
  586.     esac
  587. fi
  588.  
  589. CRDBASE="$PREFIX/share/foo2zjs/crd"
  590. case "$RES" in
  591.     600x600)    SCREEN=screen1200.ps;;
  592.     1200x600)    SCREEN=screen1200.ps;;
  593.     2400x600)    SCREEN=screen2400.ps;;
  594. esac
  595.  
  596. PSTOPS_OPTS="-n"
  597.  
  598. case "$COLORMODE" in
  599. 0|"")
  600.     # Monochrome
  601.     ;;
  602. 10|icm)
  603.     # Use old ICM method
  604.     AIB=-A
  605.     BC=-B
  606.     case "$GAMMAFILE" in
  607.     none.icm | */none.icm)
  608.         create_crd
  609.         ;;
  610.     *.icm|*.ICM|*.icc|*.ICC)
  611.     #
  612.     # Its really an .ICM file, not a gamma file.
  613.     #
  614.     # The file can be a full path name, or the name of a file in $SHARE/icm/
  615.     #
  616.     if [ -r "$GAMMAFILE" ]; then
  617.         create_crd
  618.     elif [ -r "$SHARE/icm/$GAMMAFILE" ]; then
  619.         GAMMAFILE="$SHARE/icm/$GAMMAFILE"
  620.         create_crd
  621.     else
  622.         GAMMAFILE=
  623.     fi
  624.     ;;
  625.     esac
  626.     ;;
  627. 1|photo)
  628.     # Photo
  629.     GAMMAFILE="$CRDBASE/prolog.ps"
  630.     GAMMAFILE="$GAMMAFILE $CRDBASE/2300w-1200@150-l250-kx,ucr125,75-per.crd"
  631.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  632.     ;;
  633. 2|graphics)
  634.     # Photo and Text
  635.     GAMMAFILE="$CRDBASE/prolog.ps"
  636.     #GAMMAFILE="$GAMMAFILE $CRDBASE/2300w-1200@150-l250-kx,ucr100,75-per.crd"
  637.     GAMMAFILE="$GAMMAFILE $CRDBASE/kh.crd"
  638.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  639.     ;;
  640. 3|text)
  641.     # Graphic and Text
  642.     GAMMAFILE="$CRDBASE/prolog.ps"
  643.     #GAMMAFILE="$GAMMAFILE $CRDBASE/2300w-1200@150-l250-kx,ucr100,50-per.crd"
  644.     GAMMAFILE="$GAMMAFILE $CRDBASE/kx.crd"
  645.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  646.     ;;
  647. 4|tonersave)
  648.     # Reduced toner
  649.     GAMMAFILE="$CRDBASE/prolog.ps"
  650.     GAMMAFILE="$GAMMAFILE $CRDBASE/2300w-1200@150-l250-kx,ucr100,0-per.crd"
  651.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  652.     ;;
  653. *.crd)
  654.     GAMMAFILE="$CRDBASE/prolog.ps"
  655.     if [ -f $COLORMODE ]; then
  656.     GAMMAFILE="$GAMMAFILE $COLORMODE"
  657.     elif [ -f $CRDBASE/$COLORMODE ]; then
  658.     GAMMAFILE="$GAMMAFILE $CRDBASE/$COLORMODE"
  659.     else
  660.     error "Can't find CRD '$COLORMODE' in . or in $CRDBASE"
  661.     fi
  662.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  663.     ;;
  664. *)
  665.     error "Unknown color method '$COLORMODE'"
  666.     ;;
  667. esac
  668.  
  669. if [ "$COLOR" != "" -a "$QUALITY" = wts ]; then
  670.     PSTOPS_OPTS="$PSTOPS_OPTS -w"
  671. fi
  672.  
  673. if [ "" != "$COLOR" ]; then
  674.     if [ "" = "$AIB" -a "" = "$BC" ]; then
  675.     # Faster, but can't handle AllIsBlack or BlackClears
  676.     : #GSDEV=-sDEVICE=pksmraw
  677.     else
  678.     # Can't handle different size pages
  679.     : #GSDEV=-sDEVICE=bitcmyk
  680.     fi
  681. fi
  682.  
  683. #
  684. #    Figure out USERNAME
  685. #
  686. if [ "$LPUSER" != "" ]; then
  687.     USER="$LPUSER@$LPHOST"
  688. else
  689.     USER=""
  690. fi
  691.  
  692. #
  693. #    Main Program, just cobble together the pipeline and run it
  694. #
  695. #    The malarky with file descriptors 1 and 3 is to avoid a bug in
  696. #    (some versions?) of Ghostscript where Postscript's stdout gets
  697. #    intermingled with the printer drivers output, resulting in
  698. #    corrupted image data.
  699. #
  700. GS="$GSBIN -q -dBATCH -dSAFER -dQUIET -dNOPAUSE"
  701.  
  702. foo2zjs-pstops $PSTOPS_OPTS | \
  703. $PREFILTER \
  704. | ($GS $PAPERSIZE -g$DIM -r$RES $GSDEV $GSOPTS \
  705.     -sOutputFile="|cat 1>&3" $GAMMAFILE -_ >/dev/null) 3>&1 \
  706. | foo2lava -r$RES -g$DIM -p$PAPER -m$MEDIA -n$COPIES -d$DUPLEX -s$SOURCE \
  707.         -z$MODEL $COLOR $CLIP_UL $CLIP_LR $CLIP_LOG $SAVETONER \
  708.         -J "$LPJOB" -U "$USER" \
  709.         $BC $AIB $COLOR2MONO $NOPLANES $EXTRAPAD -D$DEBUG
  710.  
  711. #
  712. #    Log the command line, for debugging and problem reports
  713. #
  714. if [ -x /usr/bin/logger ]; then
  715.     logger -t "$BASENAME" -p lpr.info -- \
  716.     "$GSBIN $PAPERSIZE -g$DIM -r$RES $GSDEV $GSOPTS $GAMMAFILE"
  717.     logger -t "$BASENAME" -p lpr.info -- \
  718.     "foo2lava -r$RES -g$DIM -p$PAPER -m$MEDIA \
  719. -n$COPIES -d$DUPLEX -s$SOURCE -z$MODEL $COLOR $CLIP_UL $CLIP_LR $CLIP_LOG \
  720. $SAVETONER $BC $AIB $COLOR2MONO $NOPLANES $EXTRAPAD"
  721. fi
  722.  
  723. #
  724. #    Remove cruft
  725. #
  726. if [ $DEBUG -eq 0 ]; then
  727.     for i in crd.ps log usecie.ps selcrd.ps
  728.     do
  729.     file="$ICCTMP.$i"
  730.     [ -f $file ] && rm -f $file
  731.     done
  732.     [ -f "$TMPFILE" ] && rm -f $TMPFILE
  733. fi
  734.  
  735. exit 0
  736.